package v1

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"strconv"
	"teacher-helper/global"
	"teacher-helper/models"
	"teacher-helper/models/request"
	"teacher-helper/service"
)

func GetClassList(c *gin.Context) {
	var queryInfo request.QueryInfo
	if err := c.ShouldBind(&queryInfo); err != nil {
		c.JSON(201, gin.H{"msg": err, "data": nil})
		return
	}
	claims, _ := c.Get("claims")
	user := claims.(*request.CustomClaims)
	if len(user.ClassIds) == 0 {
		c.JSON(202, gin.H{"msg": "当前用户目前还没有分配班级", "data": nil})
		return
	}
	Classes, total, err := service.GetClassList(queryInfo, user)
	if err != nil {
		c.JSON(203, gin.H{"msg": err, "data": nil})
	} else {
		c.JSON(http.StatusOK, gin.H{"msg": "获取班级列表成功", "data": map[string]interface{}{
			"classes": Classes,
			"total": total,
		}})
	}
	return
}

func GetMajorClass(c *gin.Context)  {
	id, ok := c.GetQuery("major_id")
	grade, ok2 := c.GetQuery("grade")
	Id, err := strconv.Atoi(id)
	if !ok || err != nil || !ok2 {
		c.JSON(201, gin.H{"msg": err, "data": nil})
		return
	}
	classList, err := service.GetMajorClass(Id, grade)
	if err != nil {
		c.JSON(202, gin.H{"msg": err, "data": nil})
	} else {
		c.JSON(http.StatusOK, gin.H{"msg": "获取班级专业列表成功", "data": classList})
	}
	return
}

func GetClassMajorList(c *gin.Context)  {
	id, ok := c.GetQuery("id")
	Id, err := strconv.Atoi(id)
	if !ok || err != nil {
		c.JSON(201, gin.H{"msg": err, "data": nil})
		return
	}
	id_list, err := service.GetClassMajorList(Id)
	if err != nil {
		c.JSON(202, gin.H{"msg": err, "data": nil})
	} else {
		c.JSON(http.StatusOK, gin.H{"msg": "获取班级专业列表成功", "data": id_list})
	}
	return
}

func AddOneClass(c *gin.Context)  {
	var Class models.SysClass
	if err := c.BindJSON(&Class);err != nil{
		global.Logger.Error(err.Error())
		c.JSON(201, gin.H{"msg": err})
		return
	}
	err := service.AddOneClass(Class)
	if err != nil {
		c.JSON(202, gin.H{"msg": err})
	}else {
		c.JSON(http.StatusOK, gin.H{"msg": "添加班级成功"})
	}
	return
}

func UpdateClass(c *gin.Context) {
	var Class models.SysClass
	if err := c.BindJSON(&Class); err != nil {
		c.JSON(201, gin.H{"msg": "参数获取失败"})
		return
	}
	err := service.UpdateClass(Class)
	if err != nil {
		c.JSON(201, gin.H{"msg": err, "data": nil})
	} else {
		c.JSON(http.StatusOK, gin.H{"msg": "修改班级成功", "data": nil})
	}
	return
}

func DeleteClass(c *gin.Context) {
	id, ok := c.GetQuery("id")
	Id, err := strconv.Atoi(id)
	if !ok || err != nil {
		c.JSON(201, gin.H{"msg": "参数获取失败"})
		return
	}
	err = service.DeleteClass(Id)
	if err != nil {
		c.JSON(201, gin.H{"msg": err, "data": nil})
	} else {
		c.JSON(http.StatusOK, gin.H{"msg": "删除班级成功", "data": nil})
	}
	return
}

